Add Canvas Extensions website page#1900
Merged
Merged
Conversation
Generate extensions data, add the extensions listing route/navigation, and include install URL copy actions pinned to the build commit SHA. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
Pull request overview
Adds first-class “Canvas Extensions” support to the Awesome Copilot website by generating a new extensions.json dataset, wiring it into the homepage + sidebar navigation, and introducing multiple example extensions under extensions/ that can be listed and linked to from the site.
Changes:
- Generate and publish
website/public/data/extensions.json, plus manifest counts, from the top-levelextensions/directory. - Add
/extensions/website route + homepage card + sidebar nav entry, including “copy install URL” actions. - Add several canvas extension implementations (and associated assets) under
extensions/.
Show a summary per file
| File | Description |
|---|---|
| website/src/scripts/pages/index.ts | Adds extensions to homepage manifest counts rendering. |
| website/src/scripts/pages/extensions.ts | Implements client-side behavior for the extensions listing page (sorting + copy install URL). |
| website/src/scripts/pages/extensions-render.ts | Renders extensions list HTML and constructs install/GitHub links. |
| website/src/pages/index.astro | Adds homepage card linking to the new Canvas Extensions page. |
| website/src/pages/extensions.astro | Adds the Canvas Extensions listing route/page. |
| website/astro.config.mjs | Adds “Canvas Extensions” to the Starlight sidebar nav. |
| extensions/where-was-i/extension.mjs | Adds “where-was-i” canvas extension (context reconstruction). |
| extensions/gesture-review/package.json | Declares package metadata/deps for the gesture-review extension. |
| extensions/gesture-review/package-lock.json | Locks dependencies for the gesture-review extension. |
| extensions/gesture-review/extension.mjs | Adds gesture-based PR review canvas extension implementation. |
| extensions/feedback-themes/public/index.html | Adds the UI for the feedback-themes extension. |
| extensions/feedback-themes/package.json | Declares package metadata/deps for the feedback-themes extension. |
| extensions/feedback-themes/package-lock.json | Locks dependencies for the feedback-themes extension. |
| extensions/feedback-themes/extension.mjs | Adds the feedback-themes extension server/canvas logic. |
| extensions/feedback-themes/data/signals.json | Adds fixture data used by the feedback-themes extension. |
| extensions/diagram-viewer/public/index.html | Adds the UI for the diagram-viewer extension. |
| extensions/diagram-viewer/package.json | Declares package metadata/deps for the diagram-viewer extension. |
| extensions/diagram-viewer/package-lock.json | Locks dependencies for the diagram-viewer extension. |
| extensions/diagram-viewer/extension.mjs | Adds the diagram-viewer extension server/canvas logic. |
| extensions/color-orb/package.json | Declares package metadata/deps for the color-orb extension. |
| extensions/color-orb/package-lock.json | Locks dependencies for the color-orb extension. |
| extensions/color-orb/extension.mjs | Adds the color-orb extension implementation. |
| extensions/accessibility-kanban/public/index.html | Adds the UI for the accessibility-kanban extension. |
| extensions/accessibility-kanban/package.json | Declares package metadata/deps for the accessibility-kanban extension. |
| extensions/accessibility-kanban/extension.mjs | Adds the accessibility-kanban extension server/canvas logic. |
| eng/generate-website-data.mjs | Adds extensions data generation + manifest updates + commit SHA pinning. |
| eng/constants.mjs | Exposes EXTENSIONS_DIR constant for generators/validators. |
Copilot's findings
Files not reviewed (4)
- extensions/color-orb/package-lock.json: Language not supported
- extensions/diagram-viewer/package-lock.json: Language not supported
- extensions/feedback-themes/package-lock.json: Language not supported
- extensions/gesture-review/package-lock.json: Language not supported
- Files reviewed: 23/27 changed files
- Comments generated: 8
Comment on lines
+123
to
+129
| function getCurrentCommitSha() { | ||
| return execSync("git --no-pager rev-parse HEAD", { | ||
| cwd: ROOT_FOLDER, | ||
| encoding: "utf8", | ||
| stdio: ["pipe", "pipe", "pipe"], | ||
| }).trim(); | ||
| } |
Comment on lines
+64
to
+66
| <a href="${getGitHubUrl( | ||
| item.path | ||
| )}" class="btn btn-secondary btn-small" target="_blank" rel="noopener noreferrer" title="View on GitHub">GitHub</a> |
Comment on lines
+120
to
+134
| if (req.method === "POST" && req.url === "/select-pr") { | ||
| let body = ""; | ||
| req.on("data", (chunk) => (body += chunk)); | ||
| req.on("end", () => { | ||
| const { number } = JSON.parse(body); | ||
| const pr = prList.find((p) => p.number === number); | ||
| if (pr) { | ||
| currentPR = pr; | ||
| gestureState = "idle"; | ||
| broadcast("pr", currentPR); | ||
| broadcast("state", { state: "idle" }); | ||
| } | ||
| res.writeHead(200, { "Content-Type": "application/json" }); | ||
| res.end(JSON.stringify({ ok: true })); | ||
| }); |
Comment on lines
+138
to
+156
| if (req.method === "POST" && req.url === "/gesture-decision") { | ||
| let body = ""; | ||
| req.on("data", (chunk) => (body += chunk)); | ||
| req.on("end", () => { | ||
| const { decision } = JSON.parse(body); | ||
| gestureState = decision; // "approved" or "rejected" | ||
| lastDecision = { decision, pr: currentPR, timestamp: Date.now() }; | ||
| broadcast("state", { state: gestureState }); | ||
|
|
||
| if (session && currentPR) { | ||
| const action = decision === "approved" ? "approve" : "reject"; | ||
| session.send({ | ||
| prompt: `The user gave a thumbs ${decision === "approved" ? "up" : "down"} gesture to ${action} PR #${currentPR.number} ("${currentPR.title}" by ${currentPR.author}). Please ${action} this pull request accordingly.`, | ||
| }); | ||
| } | ||
|
|
||
| res.writeHead(200, { "Content-Type": "application/json" }); | ||
| res.end(JSON.stringify({ ok: true, decision })); | ||
| }); |
Comment on lines
+6
to
+8
| "dependencies": { | ||
| "@github/copilot-sdk": "latest" | ||
| } |
Comment on lines
56
to
61
| { label: "Instructions", link: "/instructions/" }, | ||
| { label: "Skills", link: "/skills/" }, | ||
| { label: "Hooks", link: "/hooks/" }, | ||
| { label: "Workflows", link: "/workflows/" }, | ||
| { label: "Canvas Extensions", link: "/extensions/" }, | ||
| { label: "Plugins", link: "/plugins/" }, |
Comment on lines
+640
to
+645
| `Help me pick up where I left off. What should I focus on first?`; | ||
| } | ||
|
|
||
| try { await sessionRef.send(prompt); } catch {} | ||
| res.writeHead(200, { "Content-Type": "application/json" }); | ||
| res.end(JSON.stringify({ ok: true })); |
Comment on lines
+706
to
+712
| prompt = `I was working on ${thread} and got interrupted. Context: branch=${data.branch}, recent commits: ${(data.recentCommits || []).join("; ")}. Help me resume.`; | ||
| } else { | ||
| prompt = `Help me resume. Branch: ${data.branch}. Commits: ${(data.recentCommits || []).join("; ")}. Uncommitted: ${(data.uncommitted || []).join("; ")}.`; | ||
| } | ||
| if (sessionRef) await sessionRef.send(prompt); | ||
| return { sent: true }; | ||
| }, |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Generate extensions data, add the extensions listing route/navigation, and include install URL copy actions pinned to the build commit SHA.
Pull Request Checklist
npm startand verified thatREADME.mdis up to date.stagedbranch for this pull request.Description
Type of Contribution
Additional Notes
By submitting this pull request, I confirm that my contribution abides by the Code of Conduct and will be licensed under the MIT License.